FCC Guides
Welcome to my iteration of a chroma wiki. As a beginner myself, absolutely no coding knowledge before BeatSaber, some of these other wikis were and sometimes still are super confusing. Now that I'm a bit more experienced I feel like I can help ease some information down.
Heres a quick breakdown of what this will go over:
- Plugins
- Working in Chromapper
- Working in VSCode
- Js
- Node.js
- Heck
- Environment enhancements
- Geometry
- Animations
- For loops and other QOL shortcuts in Js
Plugins
(Note that none of these are necessarily needed)
- ENLIGHTEN: Quality-of-life plugin for step gradients and Chroma lighting.
- PROP EDIT: Essential plugin for node editing in ChroMapper.
- EXTENDED LIGHT IDS: A must-have for environment enhancements.
Tools
ChroMapper Basics
Usually Chromapper is your best option for Chroma and it is widely used offering lots of support
Strobe Generator
- Basic Event Strobe
- Value A - (The first event) What type/t the event starts on. eg; on/off
- Value B - (The second event) What type/t the event ends on. eg; flash/fade
- Color, Flip Colors, Dynamic - Not really important as we are usually setting our own colors via Chroma
- Strobe Interval - How fast the strobe switches from A to B
- Strobe Easing - Switching this from linear will make it so the strobe speeds up over time to the interval
- Color Gradients
- Chroma Easing - How fast the gradient switches from A to B
- Lerp type
- RGB - For example lets use rgb(221, 68, 213) to rgb(50, 150, 100). When we use this type the all values switch at the same time to get the end color. Red (221 → 50) Green (68 → 150) Blue (213 → 100)
- HSV - Simply understand that HSV is Hue, Saturation, and Value. So instead of individually adjusting each value HSV uses something like a color wheel to adjust the Hue making a smoother gradient from point A to B
From my understanding...
A transition of colors between 2 events
- Precise Laser Speed Interpolation
- Placement Interval - How many beats apart the events are placed
- Laser Speed Easing - Unlike the easing for strobes this doesn't add more events as time goes. Instead it adjusts the value of each event over time
- Lock Laser Rotation - Ensures that the lasers rotate in the selected option (Spin Direction)
- Unique Laser Directions - Ensures left and right lasers go in a different way/direction
- Decimal Precision - Best to just keep at 1 (default)
A transition of speed between 2 events
- Chroma Step Gradient
- Value A - What type/t each event placed will be (off on flash fade)
- Color, Flip Colors - Again, not too important as well be setting our own colors via Chroma
- Strobe Interval - How many beats apart the events are placed. Use either 8 or 16 for smooth gradients
- Chroma Easing - How fast the color switches between events
A transition of colors between 2 events Unlike Color Gradients Chroma step places many events to make the gradient
Chroma Menu
- Color Selection
- There are many ways to select colors on Chromapper, this being the most precise if you want a specific color
- Global Color Overrides
- This allows you to change colors of notes, lights (vanilla lights), boosts, and walls. However I mostly use this if the map environment has confusing colors eg; green day. Ill set the colors to red and blue then before publishing I remove the overrides
- Chroma Tools
- Place Chroma Colored Objects - Turning this on places notes, bombs, and walls in the selected color
- Place Chroma RGB Events - Instead of the normal red blue events when you place an event with this on an event will be placed with the selected color
- Color Picker (off chroma object) - With this on, clicking on a Chroma event will select that same color
- Paint Selected Objects - Selecting multiple objects and clicking on this will color all selected objects the color selected
- Color Picker - Where you can select/make your own light colors
- H - Hue, The color
- S - Saturation, The intensity of the color
- V - Value, The light/darkness of the color
- RGB - Red, Green, Blue. These values can be set above 1 but doing so can make the lights extremely bright
- (RGB) A - Alpha, How opaque (Visible) or transparent (Invisible) the color Is. You can put the alpha above 1 which makes it extremely bright
Lets break this down
- Color Preset - Save any color you want by clicking the + icon, to remove the color right click it
Chroma+ Basics
The way I think of chroma+ is anything outside of Chromapper like js editing or .dat editing. So stuff like custom colors and light Ids
Breakdown
- Custom Settings
- Environment Enhancements
- What is an environment object
- How to get environment objects
- How to duplicate environment objects
- Other properties
- Geometry
- What is geometry
- How to make geometry
- Geometry shapes and materials
- Other properties
Settings
Ever spend so much time lighting, then, request it to a streamer and they have static lights? This will show 'em! With custom settings you can ensure everyone plays on the settings you intended note that they can still deny the settings
Available Settings
- "_playerOptions"
- "_leftHanded": (bool)
- "_playerHeight": (float)
- "_automaticPlayerHeight": (bool)
- "_sfxVolume": (float)
- "_reduceDebris": (bool)
- "_noTextsAndHuds": (bool)
- "_noFailEffects": (bool) Hidden setting, this will hide "Miss" text.
- "_advancedHud": (bool)
- "_autoRestart": (bool)
- "_saberTrailIntensity": (float)
- "_noteJumpDurationTypeSettings": (Dynamic, Static)
- "_noteJumpFixedDuration": (float)
- "_noteJumpStartBeatOffset": (float)
- "_hideNoteSpawnEffect": (bool)
- "_adaptiveSfx": (bool)
- "_environmentEffectsFilterDefaultPreset": AllEffects makes it so player plays with lights! (AllEffects, Strobefilter, NoEffects)
- "_environmentEffectsFilterExpertPlusPreset": AllEffects makes it so player plays with lights! (AllEffects, Strobefilter, NoEffects)
- "_modifiers"
- "_energyType": (Bar, Battery)
- "_noFailOn0Energy": (bool)
- "_instaFail": (bool)
- "_failOnSaberClash": (bool) Hidden setting, instantly fails player when sabers clash.
- "_enabledObstacleType": (All, FullHeightOnly, NoObstacles) FullHeightOnly is a hidden setting and disables crouch walls.
- "_fastNotes": (bool) Hidden setting, forces NJS to 20.
- "_strictAngles": (bool)
- "_disappearingArrows": (bool)
- "_ghostNotes": (bool)
- "_noBombs": (bool)
- "_songSpeed": (Normal, Faster, Slower, SuperFast)
- "_noArrows": (bool)
- "_proMode": (bool)
- "_zenMode": (bool)
- "_smallCubes": (bool)
- "_environments"
- "_overrideEnvironments": (bool) Enable or disable user environment.
- "_colors"
- "_overrideDefaultColors": (bool) Enable or disable user color scheme.
- "_graphics"
- "_mirrorGraphicsSettings": (int) 0 - 3
- "_mainEffectGraphicsSettings": (int) 0 - 1 "Bloom Post Process"
- "_smokeGraphicsSettings": (int) 0 - 1
- "_burnMarkTrailsEnabled": (bool) Hidden setting, hides burn trails left by sabers.
- "_screenDisplacementEffectsEnabled": (bool)
- "_maxShockwaveParticles": (int) 0 - 2
My personal choices;
"_playerOptions": {
"_hideNoteSpawnEffect": true,
"_environmentEffectsFilterDefaultPreset": "AllEffects",
"_environmentEffectsFilterExpertPlusPreset": "AllEffects",
},
"_environments": {
"_overrideEnvironments": false
},
"_graphics": {
"_mirrorGraphicsSettings": 3,
"_mainEffectGraphicsSettings": 1,
"_smokeGraphicsSettings": 1,
"_screenDisplacementEffectsEnabled": true,
"_maxShockwaveParticles": 0,
},
"_chroma": {
"_disableChromaEvents": false,
"_disableEnvironmentEnhancements": false,
"_disableNoteColoring": false,
"_forceZenModeWalls": false
},
Environment Enhancements
Environment enhancements, as the name implies, allows you to change (or enhance) the environment to make it unique and feel as your own
This is an example of code for this;
environment.push(
{id: "Smoke", lookupMethod: "Contains", active: false}
{id: "Mountains", lookupMethod: "Contains", duplicate: 1, scale: [2, 4, 2], position: [0, 0, 0]}
)
Lets break this down!
- id - id is the name of an object such as "Rings, Waterfall, Laser, etc"
- lookUpMethod - the way the id is searched for, kind of like doing a ctrl+f for the id
- Regex:
- BillieEnvironment\\.\\[\\d*\\]Environment\\.\\[12\\]Mountains
- Exact:
- BillieEnvironment.[0]Environment.[12]Mountains
- Contains:
- Mountains
- EndsWith:
- .[12]Mountains
We will use "BillieEnvironment.[0]Environment.[12]Mountains" as an example id. Here is how the following may be used...
- Regex:
- Active - True/False (or On/Off) simply makes the object show or not. Some prefer to use "position: [-999, -999, -999]" because if active is false you CANT use anything from the object
- Duplicate - recreates an object and allows you to edit it
- Track - adds a track to the object if you want to animate it
- Properties - the following can be added to any object to customize them to your liking;
- scale: [x, y, z]
- position: [x, y, z]
- localPosition: [x, y, z]
- rotation: [x, y, z] (Pitch, Yaw, Roll)
- localRotation: [x, y, z] (Pitch, Yaw, Roll)
My Examples
Heres a couple previews of my previous lightshows so you get a grip of what you can possibly do